// pages/songDetail/songDetail.js
import request from '../../../utils/request'
import PubSub from 'pubsub-js'
import moment from 'moment'
// 获取全局实例
const appInstance=getApp()

Page({

    /**
     * 页面的初始数据
     */
    data: {
        isPlay:false, //是否播放
        songId:'',
        song:{},
        musicLink:'',
        playTypes:['单曲循环','顺序播放','随机播放'],
        playIcon:'icon-danquxunhuan',
        index: 0,
        currentWidth:'0rpx',
        currentTime:'00:00',//初始化音乐播放时长
        durationTime:'00:00',//音乐播放总时长
    },
    // 播放类型改变时
    playTypeChange(e){
        let index=e.detail.value
        let playIcon=''
        if(index==0){
            playIcon='icon-danquxunhuan'
        }
        if(index==1){
            playIcon='icon-hanhan-01-01'
        }
        if(index==2){
            playIcon='icon-suijibofang'
        }
        this.setData({
            index,
            playIcon
        })
        console.log('播放类型改变了:',this.data.playTypes[index]);
    },

    // 点击播放或暂停
    handleMusicPlay(){
        let isPlay=!this.data.isPlay
        let {songId,musicLink}=this.data
        this.musicController(isPlay,songId)
    },
    // 控制音乐播放/暂停的功能函数
    async musicController(isPlay,songId){
        if(isPlay){
            if(this.data.musicLink){
                console.log('本地有缓存');
                this.backgroundAudioManager.src=this.data.musicLink
            }else{
                let musicLinkData=await request('/song/url',{id:songId})
                let musicLink=musicLinkData.data[0].url
                this.setData({
                    musicLink
                })
                this.backgroundAudioManager.src=musicLink
            }
            
            this.backgroundAudioManager.title=this.data.song.name
        }else{
            this.backgroundAudioManager.pause()
        }
    },
    // 获取音乐详情
    async getSongDetail(musicId){
        let ids=musicId
        let result=await request('/song/detail',{ids})
        // console.log(result);
        this.setData({
            song:result.songs[0]
        })
        let durationTime=moment(this.data.song.dt).format('mm:ss')
        this.setData({
            durationTime
        })
        // 动态修改窗口标题
        wx.setNavigationBarTitle({
          title: this.data.song.name,
        })
        console.log('gh:',this.data.song);
    },
    // 修改音乐状态
    changePlayState(isPlay){
        // 修改音乐的状态
        this.setData({
            isPlay
        })
        // 修改全局音乐播放的状态
        appInstance.globalData.isMusicPlay=isPlay
        
    },

    //#region (切换音乐(上一首/下一首))
    handleSwitch(e){
        let type=e.currentTarget.id
        // console.log(type);
        // 关闭当前播放的音乐
        this.setData({
            musicLink:''
        })
        this.backgroundAudioManager.stop()
        // 订阅来自推荐歌单的musicId（通过点击上/下一首）
        PubSub.subscribe("musicId",(_,musicId)=>{
            this.getSongDetail(musicId)
            // 取消订阅(不然点击下一首就永远把订阅栈上的顶部id重复打印)
            PubSub.unsubscribe('musicId')
            // 跳转下一首或者上一首歌曲时自动播放
            this.musicController(true,musicId)
        })

        // 发布消息给推荐歌单页面
        PubSub.publish('switchType',type)
    },
    //#endregion
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        let musicId=options.id
        this.setData({
            songId:options.id
        })
        this.getSongDetail(musicId)
        this.musicController(true,this.data.songId)


        //#region (判断当前页面音乐是否在播放)
        if(appInstance.globalData.isMusicPlay && appInstance.globalData.musicId===this.data.songId){
            // 修改当前页面音乐播放状态为true
            this.setData({
                isPlay:true
            })
        }
        //#endregion

        //#region (音乐实例)
        // 创建音乐播放的实例
        this.backgroundAudioManager=wx.getBackgroundAudioManager()
        // 监听音乐播放
        this.backgroundAudioManager.onPlay(()=>{
            this.changePlayState(true)
            appInstance.globalData.musicId=this.data.songId
        })
        // 监听音乐暂停
        this.backgroundAudioManager.onPause(()=>{
            this.changePlayState(false)
        })
        // 真机调试上监听音乐停止
        this.backgroundAudioManager.onStop(()=>{
            this.changePlayState(false)
        })
        //监听音乐播放进度
        this.backgroundAudioManager.onTimeUpdate(()=>{
            let cru=this.backgroundAudioManager.currentTime
            let all=this.backgroundAudioManager.duration
            // console.log(cru,all);
            let currentWidth=cru/all*450+'rpx'
            // console.log('crw:',currentWidth);
            let currentTime=moment(this.backgroundAudioManager.currentTime*1000).format('mm:ss')
            this.setData({
                currentTime,
                currentWidth
            })
        })
        // 监听音频自然播放完
        this.backgroundAudioManager.onEnded(()=>{
            console.log('歌曲自然播放完毕');
            this.setData({
                currentWidth:'0rpx'
            })
            console.log(this.data.musicLink);
            this.musicController(true,this.data.songId)
        })
        //#endregion
    
    },
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})